//   MVCWin32 (Window.h)
//
//   Copyright 2010 Eric Llewellyn
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.

#ifndef WINDOW_H
#define WINDOW_H

#ifndef UNICODE
#define UNICODE
#endif

#include "IWindowDelegate.h"
#include "Menu.h"
#include "View.h"

#include <windows.h>
#include <map>

namespace MVCWin32
{
	class Window
	{
	private:
		HWND handle;
		View* view;
	public:
		static std::map<HWND, Window*> windowMap;
		static void RegisterClass();
		static LRESULT CALLBACK MessageRouter(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
	public:
		IWindowDelegate* delegatePtr;
		Window();
		LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
		bool Close();
		LPWSTR GetTitle();
		bool SetTitle(LPWSTR title);
		RECT GetRect();
		bool SetRect(int left, int top, int right, int bottom);
		Menu* GetMenu();
		bool SetMenu(Menu* menu);
		void Update();
		View* GetView();
		bool SetView(View* view);
		void Init();
		HWND GetHandle();
		void SetHandle(HWND handle);
	};
}

#endif /*WINDOW_H*/